home *** CD-ROM | disk | FTP | other *** search
/ Internet 53 / INTERNET53.iso / mac / SOFTWARE / MAC / MULTIMEDIA / SOUNDEFFECTS / SOUNDEFFECTS-092.HQX / SoundEffects 0.9.2 %c4 / SoundEffects Developer%d5s Kit / Interfaces / Glue.h < prev    next >
Text File  |  1997-07-06  |  9KB  |  240 lines

  1. // =============================================================================
  2. // SOUNDEFFECTS MODULES HEADER - VERSION 1.0 - NOVEMBER 1994
  3. // ©1994 Alberto Ricci <aricci@kagi.com> <fricci@polito.it>
  4. //       Home page: http://www.silene.it/aricci/
  5. // Don’t forget to send me any cool effect modules you create!
  6. // This text looks best in monaco 9 font, 4 spaces per tab, no wrapping
  7.  
  8. #ifndef _H_glue
  9. #define _H_glue
  10.  
  11. #if defined(powerc) || defined (__powerc)
  12. #pragma options align=mac68k
  13. #endif
  14.  
  15. // =============================================================================
  16. // MESSAGES (sent to the module):        Corresponding action you must take (Glue.c will handle all this for you)
  17.  
  18. #define    kMsgRun            'Mrun'        //    run the effect without showing any settings dialog.
  19. #define    kMsgSettings    'Mset'        //    let the user change any settings specific to your
  20.                                     //    module, if there are any.
  21. #define    kMsgSettingsRun    'Msar'        //    let the user change any setting, then run the effect.
  22. #define    kMsgHeadersVers    'Mhvr'        //    store the value of kHeadersVersion into the long
  23.                                     //    word pointed to by the GluePtr parameter, then
  24.                                     //    return noErr.
  25. #define    kMsgAbout        'Minf'        //    do whatever you want to describe your effect module.
  26.  
  27. // =============================================================================
  28. // RECORD DEFINITIONS:
  29.  
  30. typedef struct                        // There is one of these structures for each channel in the sound.
  31. {
  32.     Handle            chan;            // You will normally access the channel handle like this:
  33.                                     //    myChannelHandle = (*modInfo->hands)[channelNumber].chan;
  34.                                     // with channelNumber ranging from 0 to modInfo->numChans - 1.
  35.     unsigned long    size;            // size is the number of bytes, not samples.
  36. } SEChanRec, *SEChanPtr, **SEChanHandle;
  37.  
  38. typedef struct
  39. {
  40.     long            outVol[1];
  41. } ChanAttrsRec, *ChanAttrsPtr, **ChanAttrsHandle;
  42.  
  43. #define    kHeadersVersion    1            //    current version of callbacks
  44.  
  45. typedef struct                        //    items marked as read-only cannot be changed directly
  46. {                                    //    by the module. Use the callbacks instead.
  47.     short            version;
  48.     short            refNum;
  49.     StringPtr        name;
  50.     
  51.     WindowPtr        parentWind;
  52.     SEChanHandle    hands;
  53.     ChanAttrsHandle    outModes;        //    read-only
  54.     unsigned long    selSt;
  55.     unsigned long    selEnd;
  56.     unsigned long    loopSt;
  57.     unsigned long    loopEnd;
  58.     Fixed            rate;
  59.     short            bps;
  60.     short            numChans;
  61.     short            firstSelCh;
  62.     short            lastSelCh;
  63.     Byte            baseFreq;
  64.     
  65.     short            doExtend;
  66.     short            units;
  67. } ModParamsRec, *ModParamsPtr, **ModParamsHandle;
  68.  
  69. typedef struct ModAboutRec
  70. {
  71.     short            version;
  72.     short            refNum;
  73.     WindowPtr        parentWind;
  74.     StringHandle    name;
  75. } ModAboutRec, *ModAboutPtr, **ModAboutHandle;
  76.  
  77. typedef struct
  78. {
  79.     short    type;
  80.     ProcPtr    proc;
  81.     long    param;
  82. } ItemInfoRec, *ItemInfoPtr, **ItemInfoHandle;
  83.  
  84.  
  85. // This structure is used by the GetMachineInfo callback.
  86.  
  87. #define    kCurMachineRecVers    1
  88. typedef struct MachineRec
  89. {
  90.     short        machineRecVers;                    //  kCurMachineRecVers
  91.     Boolean        hasFPU;                            //  01
  92.     Boolean        hasColorQD;                        //  02  all these flags are automatically set up by SoundEffects
  93.     Boolean        has32BitQD;                        //  03  so the modules don't have to call Gestalt all the time
  94.     Boolean        hasQuickTime;                    //  04
  95.     Boolean        hasSoundManager3;                //  05
  96.     Boolean        hasSoundInputDevice;            //  06
  97.     Boolean        hasStereoOutput;                //  07
  98.     Boolean        hasStereoInput;                    //  08
  99.     Boolean        mixesStereoOutputToMono;        //  09
  100.     Boolean        hasPlayAndRecord;                //  10
  101.     Boolean        has16BitSoundIO;                //  11
  102.     Boolean        hasMultipleChannels;            //  12
  103. } MachineRec, *MachinePtr, **MachineHandle;
  104.  
  105.  
  106. // Declare a struct for the module’s settings in your header file as
  107. // struct ModSettingsRec {…}; the struct should contain any parameters needed by your
  108. // effect when it runs, and it can be retrieved by the module with the glue routine
  109. // LoadEffectSettings.
  110. typedef struct ModSettingsRec ModSettingsRec;
  111. typedef ModSettingsRec *ModSettingsPtr;
  112. typedef ModSettingsRec **ModSettingsHandle;
  113.  
  114.  
  115. typedef pascal void (*ModSetInitProcPtr)(DialogPtr);
  116.  
  117.  
  118. typedef struct GlueRec
  119. {
  120.     short                glueVers;
  121.     
  122.     //    version 1 callbacks
  123.     
  124.     /*    progress bar */
  125.     pascal void            (*ModSetupProgress) (ModParamsPtr myInfo, short *timeToCallProgress, StringHandle textStr);
  126.     pascal OSErr        (*ModShowProgress) (unsigned long cur, unsigned long total, short *timeToCallProgress, Boolean canCancel);
  127.     pascal void            (*ModCloseProgress) (void);
  128.     pascal WindowPtr    (*GetProgressWind) (void);
  129.     
  130.     /*    effect preferences */
  131.     pascal OSErr        (*LoadEffectSettings) (StringPtr signature, ModSettingsHandle *myHand);
  132.     pascal OSErr        (*SaveEffectSettings) (StringPtr signature, ModSettingsHandle *myHand);
  133.     pascal short        (*GetEffectSettingsRefNum) (void);
  134.     
  135.     /*    user setups */
  136.     pascal OSErr        (*ModDoSettingsDialog) (ModParamsPtr modInfo, ItemInfoHandle myItemInfo,
  137.                             Boolean withSetups, ModalFilterProcPtr custFilterProc,
  138.                             ProcPtr custItemHandler, ModSetInitProcPtr initProc);
  139.     pascal short        (*ModGetSetupsNumber) (ModParamsPtr modInfo);
  140.     pascal OSErr        (*ModGetSetup) (ModParamsPtr modInfo, short num, Handle *mySetup);
  141.     pascal OSErr        (*ModGetSetupName) (ModParamsPtr modInfo, short num, StringPtr myStr);
  142.     pascal OSErr        (*ModSetSetup) (ModParamsPtr modInfo, short num, Handle mySetup, StringPtr myName);
  143.     pascal OSErr        (*ModDeleteSetup) (ModParamsPtr modInfo, DialogPtr myDlog, short itemNum, short num);
  144.     pascal OSErr        (*ModSetupCreateMenu) (ModParamsPtr modInfo, DialogPtr myDlog, short itemNum);
  145.     pascal OSErr        (*ModSetupSwitchCustom) (ModParamsPtr modInfo, DialogPtr myDlog, short itemNum, Boolean addCustom);
  146.     
  147.     /*    generic stuff */
  148.     pascal OSErr        (*GetMachineInfo) (MachinePtr *infoPtr);
  149.     pascal short        (*AskDoExtend) (void);
  150.     pascal void            (*ModInitRandSeed) (void);
  151.     
  152.     /*    dialog utilities */
  153.     pascal short        (*ApplWindowsUpdate) (WindowPtr theWind);
  154.     pascal short        (*ApplWindowsActivate) (EventRecord *passEvt);
  155.     pascal void            (*ModConvertToUnits) (ModParamsPtr modInfo, StringPtr destStr, unsigned long srcVal, short newUnits);
  156.     pascal void            (*ModConvertToBytes) (ModParamsPtr modInfo, StringPtr srcStr, unsigned long *destVal, short newUnits);
  157.     
  158.     /*    obtaining information */
  159.     pascal long            (*GetBytesToProcess) (ModParamsPtr myInfo);
  160.     pascal OSErr        (*ModMaxChSize) (ModParamsHandle modData, unsigned long *size);
  161.     pascal OSErr        (*ModMaxRelChSize) (ModParamsHandle modData, unsigned long *size);
  162.     pascal OSErr        (*ModGetPeak) (ModParamsHandle modData, unsigned long *peak, unsigned long *pos);
  163.     pascal void            (*ModGetSampleValueLimits) (short bps, signed long *min, signed long *max);
  164.     pascal unsigned long(*ModGetOffsToSndHeader) (Handle sndHandle);
  165.     pascal unsigned long(*ModGetOffsToSndData) (Handle sndHandle);
  166.     
  167.     /*    utilities */
  168.     pascal Boolean        (*ModToggleInputLevel) (Boolean on);
  169.     pascal OSErr        (*ModDrawWave) (ModParamsPtr modInfo, Rect *bounds, unsigned long maxSize, unsigned long firstByte, unsigned long zoom, short firstCh, short lastCh);
  170.     pascal OSErr        (*ModShowError) (ModParamsPtr modInfo, short errNum, Boolean withCancel);
  171.     
  172.     /*    channels stuff */
  173.     pascal OSErr        (*ModAddNewChannel) (ModParamsHandle modData, short where);
  174.     pascal OSErr        (*ModDelChannel) (ModParamsHandle modData, short chan);
  175.     pascal short        (*ModGetChannelPan) (ChanAttrsHandle chAttrs, short channel, Boolean leftOne);
  176.     pascal void            (*ModSetChannelPan) (ChanAttrsHandle chAttrs, short channel, short leftPan, short rightPan);
  177.     
  178.     /*    simple actions */
  179.     pascal OSErr        (*ModSilenceOut) (ModParamsHandle modData, short chSt, short chEnd, unsigned long st, unsigned long end);
  180.     
  181.     /*    resampling */
  182.     pascal OSErr        (*ModResampleSoundBits) (ModParamsHandle modData, short newBps);
  183.     pascal OSErr        (*ModResampleSoundRate) (ModParamsHandle modData, Fixed newRate);
  184.     
  185.     /*    new document creation */
  186.     pascal OSErr        (*ModNewDocument) (ModParamsHandle *modData);
  187.     pascal OSErr        (*ModChangeNewDocument) (ModParamsHandle modData);
  188. } GlueRec, *GluePtr, **GlueHandle;
  189.  
  190.  
  191. // =============================================================================
  192. // ROUTINE PROTOTYPES:
  193.  
  194. pascal OSErr    main            (OSType message, ModParamsPtr modInfo, GluePtr glue68k, GluePtr gluePPC);
  195.  
  196. pascal OSErr    effect            (ModParamsPtr modInfo, GluePtr glue, ModSettingsHandle *prefs);
  197. pascal OSErr    settings        (ModParamsPtr modInfo, GluePtr glue, ModSettingsHandle *prefs);
  198. pascal OSErr    about            (ModAboutPtr modInfo);
  199.  
  200. pascal OSErr    GetModSettings    (ModParamsPtr modInfo, GluePtr glue, ModSettingsHandle *prefs);
  201.  
  202. long            SetupEffectWorld    (void);
  203. void            RestoreEffectWorld    (long world);
  204.  
  205.  
  206. // =============================================================================
  207. // RESULT CODES (returned by the module):
  208.  
  209. enum
  210. {
  211.     kModNoError = noErr,            //  no error
  212.     
  213.     kModCancel = userCanceledErr,    //    return this when the module didn’t do anything.
  214.     
  215.     kModGenericError = 1,            //    return positive results if the module left the data untouched.
  216.     kModNotEnoughMemory,
  217.     kModCouldntLoadMyRes = 23,
  218.     kModUnknownMessage = 30,
  219.                                     //    SoundEffects will look for a 'STR#' resource, ID=1000, in the module.
  220.                                     //    If the string with index equal to the absolute value of the returned
  221.                                     //    result.
  222.     
  223.     kTellGenericError = -1,            //  return negative results if the module changed some data.
  224.     kTellNotEnoughMemory = -2,
  225.     kTellCouldntLoadMyRes = -23
  226. };
  227.  
  228. // returned by the settings routine:
  229. enum
  230. {
  231.     kModHasNoSettings = 1
  232. };
  233.  
  234.  
  235. #if defined(powerc) || defined (__powerc)
  236. #pragma options align=reset
  237. #endif
  238.  
  239. #endif
  240.